#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：idi_mes 
@File    ：wip_no_check.py
@IDE     ：PyCharm 
@Author  ：孔令伟
@Date    ：9/12/24 3:19 PM 
"""
from mg_app_framework import MesCode, get_organization

from common.basic_mongo import get_mongo_collection
from common.constant import RetrospectType
from prod_ctrl_service.tool.tool import check_repeat_in_or_out, check_basic_param, get_time

"""分切工序、卷绕极组在完工出站前，扫描卷芯收尾胶码提交给MES做重码校验，MES校验卷芯收尾胶码是否重复 """


async def wip_no_check(params):
    """
    卷绕工序扫描蓝胶码，MES校验蓝胶码是否重复
    :param params:{
                   "call_id":"JQ00386",   # 接口调用方认证ID
                   "trace_id":"8941d16b-0581-4e68-8940-a651afff4282",   # 接口调用ID
                   "upperpc_code": "UP011",   # 上位机编码
                   "user_code":"Y001",   # 员工编码
                   "equip_code":"ZP001",   # 设备编码
                   "process_code":"2050",   # 工序编码
                   "wip_no": :"WQ202407190071"   # 卷芯收尾胶码, 必输字段
                }
    :return:{
               "code": "success",  # success：成功; fail：失败
               "data": null,  # 本接口不需要返回数据，返回null
               "info": "OK"  # 如果为fail, 则为fail的异常描述信息
            }
    """
    error_msg = ""
    # '接口调用方认证ID/接口调用ID/上位机编码/员工编码/设备编码'是每一个接口都有且必填的入参，检查这些参数是否填写
    basic_param_check_result, basic_param_check_message = check_basic_param(params=params)
    if not basic_param_check_result:
        error_msg += basic_param_check_message
    wip_no: list = params.get("wip_no")
    if not wip_no:
        error_msg += f"必输字段字段‘卷芯收尾胶码’(wip_no)未填写;"

    # 校验是否重复出站
    process_code = params.get("process_code")
    qr_code_has_used = await check_repeat_in_or_out(
        procedure_code=process_code, qr_code_list=wip_no, op_type=RetrospectType.PRODUCT_OUT
    )
    if qr_code_has_used:
        error_msg += f"条码{qr_code_has_used}在工序{process_code}上已经有出站记录"

    if error_msg:
        result = {
            "code": MesCode.fail,  # 接口应答状态代码, success：成功; fail：失败, string
            "data": {},  # 接口返回结果描述, json数组, 本接口不需要返回数据，返回null
            "info": error_msg,
        }
        return result

    data = {
        "call_id": params.get("call_id"),  # 接口调用方认证ID, string
        "trace_id": params.get("trace_id"),  # 接口调用ID, string
        "upperpc_code": params.get("upperpc_code"),  # 上位机编码, string
        "user_code": params.get("user_code"),  # 员工编码, string
        "equip_code": params.get("equip_code"),  # 设备编码, string
        "process_code": params.get("process_code"),  # 工序编码, string
        "wip_no": params.get("wip_no"),  # 卷芯收尾胶码
        "time": get_time(),
    }
    await insert_data(data=data)
    result = {
        "code": MesCode.success,  # 接口应答状态代码, success：成功; fail：失败, string
        "data": {},  # 接口返回结果描述, json数组, 本接口不需要返回数据，返回null
        "info": "OK",  # 接口返回信息描述, 如果为fail, 则为fail的异常描述信息, string
    }
    return result


async def insert_data(data):
    """
    登记按电芯提交电芯状态(OK, NG)
    :param data:
    :return:
    """
    collection = get_mongo_collection(
        database_name=f"{get_organization()}_mes",
        collection_name=f"wip_no_check")
    await collection.insert_one(data)
